#ifndef __SE_TCP_SERVER_HPP__
#define __SE_TCP_SERVER_HPP__

#include "Acceptor.hpp"
#include "EpollEventLoop.hpp"

namespace se {

class TcpServer {
public:
    TcpServer(const char *ip, unsigned short port);
    
    /**
     * @brief 开启tcp服务器
     * 
     */
    void start();

    /**
     * @brief 关闭tcp服务
     * 
     */
    void stop();

private:
    Acceptor _acceptor;
    EpollEventLoop _epollEventLoop;

public:
    /** 当TCP连接建立时的事件处理函数 */
    EventHandler<void (std::shared_ptr<TcpConnection>)> &OnTcpConnected;
    
    /** 当TCP连接接收到数据时的事件处理函数 */
    EventHandler<void (std::shared_ptr<TcpConnection>)> &OnTcpMessageReceived;

    /** 当TCP连接断开连接时的事件处理函数 */
    EventHandler<void (std::shared_ptr<TcpConnection>)> &OnTcpClosed;

};

}  // namespace se

#endif
